//封装请求方法
export default {
	config: {
		header: {
			'Content-Type':'application/json;charset=UTF-8',
			'Content-Type':'application/x-www-form-urlencoded'
		},  
		data: {},
		method: "GET",
		dataType: "json",  /* 如设为json，会对返回的数据做一次 JSON.parse */
		responseType: "text",
		success() {},
		fail() {},
		complete() {}
	},
	interceptor: {
		request: null,
		response: null
	},
	request(options) {
		if (!options) {
			options = {}
		}
		options.baseUrl = options.baseUrl || this.config.baseUrl
		options.dataType = options.dataType || this.config.dataType
		options.header = options.header || this.config.header
		options.url = options.baseUrl + options.url
		options.data = options.data || ''
		options.method = options.method || this.config.method
		return new Promise((resolve, reject) => {  //构造函数
			let _config = null
			options.complete = (response) => {   //接口成功
				let statusCode = response.statusCode  //接口状态码
				let _config = response.config //重新config赋值，取前端传的参数替换上面config的一些默认参数
				this.interceptor.response(response) //这里是对应index.js里的 http.interceptor.response  这个是axios请求结束的拦截器
				if (statusCode === 200) {
					resolve(response); //这里的回调就是直接回到前端"then(res)"里面的res的值
				} else {
					reject(response) //这里的回调就是直接回到前端"then(res)"里面的res的值
				}
			}
			_config = Object.assign({}, this.config, options)
			if (this.interceptor.request) {
				this.interceptor.request(_config) //这里是对应index.js里的 http.interceptor.response  这个是axios请求前的拦截器，用来完善一些配置 比如token，请求头之类的玩意
			}
			if(_config.type == "form-data"){
				uni.uploadFile(_config);
			}else{
				uni.request(_config);
			}
		});
	}
}

